import LangAPI from '@/api/admin/admin/lang';
class I18nLoader {
  constructor() {
    this.cache = new Map();
    this.loadingPromises = new Map();
  }
  async loadTranslations(code) {
    // 检查缓存
    if (this.cache.has(code)) {
      return this.cache.get(code);
    }
    // 检查是否正在加载
    if (this.loadingPromises.has(code)) {
      return this.loadingPromises.get(code);
    }
    // 创建加载Promise
    const loadingPromise = this.fetchTranslations(code);
    this.loadingPromises.set(code, loadingPromise);
    try {
      const translations = await loadingPromise;
      this.cache.set(code, translations);
      this.loadingPromises.delete(code);
      return translations;
    } catch (error) {
      this.loadingPromises.delete(code);
      throw error;
    }
  }

  /**
   * 从服务器获取翻译数据
   * @param {string} code 语言代码
   * @returns {Promise<Object>} 翻译数据
   */
  async fetchTranslations(code) {
    try {
      const { data } = await LangAPI.getTranslations({ code });
      return data;
    } catch (error) {
      console.error(`加载语言 ${code} 失败:`, error);
      throw error;
    }
  }

  /**
   * 获取支持的语言列表
   * @returns {Promise<Array>} 语言代码列表
   */
  async getLanguages() {
    try {
      const { data } = await LangAPI.getLangList();
      return data;
    } catch (error) {
      console.error('获取语言列表失败:', error);
      throw error;
    }
  }

  /**
   * 清除缓存
   * @param {string} code 可选，指定语言代码，不传则清除所有缓存
   */
  clearCache(code) {
    if (code) {
      this.cache.delete(code);
    } else {
      this.cache.clear();
    }
  }
}
// 创建单例实例
export const i18nLoader = new I18nLoader();

export default I18nLoader;
